load("../../shiny/data_varis/dfvaris_litter.Rdata")
dim(dfvaris_litter) # 1340 portées
## [1] 1340 13
names(dfvaris_litter)
## [1] "species" "yearbirth" "littersizebirth"
## [4] "littersizeweaning" "sexratiobirth" "sexratioweaning"
## [7] "survlitter48h" "survlitterweaning" "survlittersexmat"
## [10] "agedam" "agemaxdam" "agesire"
## [13] "agemaxsire"
str(dfvaris_litter) # types des variables
## 'data.frame': 1340 obs. of 13 variables:
## $ species : Factor w/ 2 levels "Vrubra","Vvariegata": 1 1 1 1 1 1 1 1 1 1 ...
## $ yearbirth : int 1991 2008 1998 1989 1994 1998 2000 2012 2003 1978 ...
## $ littersizebirth : num 2 2 1 2 1 1 1 1 2 3 ...
## $ littersizeweaning: int 1 1 0 0 1 1 0 0 2 3 ...
## $ sexratiobirth : num 1 0 1 1 0 ...
## $ sexratioweaning : num 1 0 NaN NaN 0 ...
## $ survlitter48h : num 1 0.5 1 1 1 1 0 1 1 1 ...
## $ survlitterweaning: num 0.5 0.5 0 0 1 1 0 0 1 1 ...
## $ survlittersexmat : num 0.5 0.5 0 0 1 1 0 0 1 1 ...
## $ agedam : num 8 8 13 3 11 7 12 16 16 5 ...
## $ agemaxdam : num 26.6 15.7 23.8 29.7 30 ...
## $ agesire : num 5 9 20 4 11 6 10 16 9 10 ...
## $ agemaxsire : num 12.64 16.69 34.51 6.21 22.31 ...
summary(dfvaris_litter)
## species yearbirth littersizebirth littersizeweaning
## Vrubra :378 Min. :1973 Min. :1.000 Min. :0.000
## Vvariegata:962 1st Qu.:1990 1st Qu.:1.000 1st Qu.:1.000
## Median :1998 Median :2.000 Median :1.000
## Mean :1997 Mean :1.966 Mean :1.383
## 3rd Qu.:2005 3rd Qu.:3.000 3rd Qu.:2.000
## Max. :2015 Max. :6.000 Max. :6.000
##
## sexratiobirth sexratioweaning survlitter48h survlitterweaning
## Min. :0.0000 Min. :0.0000 Min. :0.000 Min. :0.0000
## 1st Qu.:0.2500 1st Qu.:0.0000 1st Qu.:1.000 1st Qu.:0.5000
## Median :0.5000 Median :0.5000 Median :1.000 Median :1.0000
## Mean :0.5742 Mean :0.5599 Mean :0.841 Mean :0.7195
## 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:1.000 3rd Qu.:1.0000
## Max. :1.0000 Max. :1.0000 Max. :1.000 Max. :1.0000
## NA's :283 NA's :14 NA's :14
## survlittersexmat agedam agemaxdam agesire
## Min. :0.0000 Min. : 2.000 Min. : 3.00 Min. : 2.000
## 1st Qu.:0.3333 1st Qu.: 5.000 1st Qu.:13.69 1st Qu.: 6.000
## Median :1.0000 Median : 8.000 Median :19.70 Median : 8.000
## Mean :0.6901 Mean : 8.515 Mean :19.58 Mean : 9.233
## 3rd Qu.:1.0000 3rd Qu.:11.000 3rd Qu.:24.61 3rd Qu.:12.000
## Max. :1.0000 Max. :30.000 Max. :44.64 Max. :38.000
## NA's :14
## agemaxsire
## Min. : 1.72
## 1st Qu.:14.64
## Median :19.72
## Mean :19.83
## 3rd Qu.:24.30
## Max. :52.54
##
length(unique(dfvaris_litter$species)) # nb d'espèces
## [1] 2
unique(dfvaris_litter$species)
## [1] Vrubra Vvariegata
## Levels: Vrubra Vvariegata
library(dplyr)
##
## Attachement du package : 'dplyr'
## Les objets suivants sont masqués depuis 'package:stats':
##
## filter, lag
## Les objets suivants sont masqués depuis 'package:base':
##
## intersect, setdiff, setequal, union
sub_dfvaris_litter <- dfvaris_litter %>% dplyr::group_by(species) %>% dplyr::sample_n(100) %>% as.data.frame
# creation d'une colonne nommée PAD
dfvaris_litter$PAD <- dfvaris_litter$agesire - dfvaris_litter$agedam
# dfvaris_litter$PAD <- dplyr::mutate(dfvaris_litter, PAD = agesire - agedam)
Il est possible d’executer cette opération sans utiliser des boucles for car R c’est un langage vectorisé.
info_vect <- function(vect) {
if(!is.vector(vect)) {
stop("'vect' doit être un vecteur")
}
l <- list()
l[[1]] <- class(vect)
l[[2]] <- length(vect)
l[[3]] <- summary(vect)
l[[4]] <- sum(is.na(vect))
names(l) <- c("class", "dim", "summary", "na")
return(l)
}
survlitter48h_list <- info_vect(dfvaris_litter$survlitter48h)
info_vect_from_df <- function(df) {
if(!is.data.frame(df)) {
stop("'df' doit être un dataframe")
}
linfo <- list()
for (i in 1:length(df)) {
linfo[[i]] <- info_vect(df[, i])
}
return(linfo)
}
# dfvaris_as_list <- info_vect_from_df(dfvaris_litter)
info_vect_by_lapply <- function (df) {
return(lapply(df, function(x) info_vect(as.vector(x))))
}
# dfvaris_as_list <- info_vect_from_df(dfvaris_litter)
par(pty = "s", ask = FALSE)
minlim <- min(dfvaris_litter$agedam, dfvaris_litter$agesire)
minlim <- max(dfvaris_litter$agedam, dfvaris_litter$agesire)
plot(dfvaris_litter$agesire ~ dfvaris_litter$agedam,
main = "Relation entre l'âge du père et l'âge de la mère chez les varis: \nles femelles les plus âgées sont généralement associée",
xlab = "Maternal age (years)",
ylab = "Paternal age (years)",
pch = ifelse(dfvaris_litter$species == "Vrubra", 2, 1), #c(2, 1)[as.numeric(dfvaris_litter$species)],
col = ifelse(dfvaris_litter$species == "Vrubra", "grey51", "black"),
xlim = c(0, 40),
ylim = c(0, 40)
)
fit <- lm(dfvaris_litter$agesire ~ dfvaris_litter$agedam)
abline(fit, col="dark green")
# mtext("formule", side = 4)
# plot.new()
# Distribution de l'âge des mères
# Création de l'histogramme de l'âge des mères
h_agedam <- hist(dfvaris_litter$agedam, freq = FALSE,
main = "Distribution de l'âge des mères",
xlab = "Age de la mère en années", ylab = "Densité")
# Ajout d'une courbe de densité
dens_agedam <- density(dfvaris_litter$agedam)
lines(dens_agedam)
# Ajout d'une ligne verticale ayant pour abscisse l'âge moyen des mères
abline(v = mean(dfvaris_litter$agedam), col = "red")
# Coloration de l'aire sous la courbe de densité pour les valeurs inférieures au 1er quartile
qrtle1 <- summary(dfvaris_litter$agedam)["1st Qu."]
qrtle3 <- summary(dfvaris_litter$agedam)["3rd Qu."]
polygon(c(0, dens_agedam$x[dens_agedam$x <= qrtle1]),
c(dens_agedam$y[dens_agedam$x <= qrtle1], 0),
col = rgb(1, 0, 0, alpha = 0.3))
polygon(c(dens_agedam$x[dens_agedam$x >= qrtle3], qrtle3),
c(0, dens_agedam$y[dens_agedam$x >= qrtle3]),
col = rgb(1, 0, 0, alpha = 0.3))
# Distribution de l'âge des mères et des pères en fonction de l'espèce
# Préparation d'une zone graphique à deux lignes et deux colonnes
par(mfrow = c(2, 2))
# Création d'un vecteur contenant l'âge des mères de l'espèce V. Rubra
dfagedam_vr <- dfvaris_litter$agedam[dfvaris_litter$species == "Vrubra"]
# Création de l'histogramme de l'âge des mères de l'espèce V. Rubra
hist(dfagedam_vr, freq = FALSE, main = "Distribution de l'âge des mères\nde l'espèce V. Rubra",
xlab = "Age de la mère", ylab = "Densité", col = "#69b3a2")
# Ajout de la courbe de densité de l'âge des mères de l'espèce V. Rubra
lines(density(dfagedam_vr))
# Création d'un vecteur contenant l'âge des mères de l'espèce V. Variegata
dfagedam_vv <- dfvaris_litter$agedam[dfvaris_litter$species == "Vvariegata"]
# Création de l'histogramme de l'âge des mères de l'espèce V. Variegata
hist(dfagedam_vv, freq = FALSE, main = "Distribution de l'âge des mères\nde l'espèce V. Variegata",
xlab = "Age de la mère", ylab = "", col = "#404080")
# Ajout de la courbe de densité de l'âge des mères de l'espèce V. Variegata
lines(density(dfagedam_vv))
# Création d'un vecteur contenant l'âge des pères de l'espèce V. Rubra
dfagesire_vr <- dfvaris_litter$agesire[dfvaris_litter$species == "Vrubra"]
# Création de l'histogramme de l'âge des pères de l'espèce V. Rubra
hist(dfagesire_vr, freq = FALSE, main = "Distribution de l'âge des pères\nde l'espèce V. Rubra",
xlab = "Age du père", ylab = "Densité", col = "#69b3a2")
# Ajout de la courbe de densité de l'âge des pères de l'espèce V. Rubra
lines(density(dfagesire_vr))
Paradigme propre différent de celui de R
La sigle gg indique grammar of graphics
# Distribution de l'âge des mères (voir onglet A du chapitre 3.2)
# Chargement de la librairie ggplot2
library(ggplot2)
# Création d'un data.frame contenant les coordonnées de la courbe de densité de l'âge des mères
df_dens_agedam <- as.data.frame(cbind(x = dens_agedam$x, y = dens_agedam$y))
# Création et affichage de l'histogramme de l'âge des mères
(gg_hist_agedam <- ggplot(data = dfvaris_litter, aes(x = agedam)) +
ggtitle("Distribution de l'âge des mères") +
xlab("Age de la mère en années") + ylab("Densité") +
geom_histogram(alpha = 0.4, breaks = h_agedam$breaks, aes(y = ..density..), colour = "black") +
geom_vline(xintercept = mean(dfvaris_litter$agedam), colour = "red") +
geom_density(alpha = 0.2) +
geom_ribbon(data = subset(df_dens_agedam, x <= qrtle1), aes(x = x, ymax = y), ymin = 0, fill = "red", alpha = 0.3) +
geom_ribbon(data = subset(df_dens_agedam, x >= qrtle3), aes(x = x, ymax = y), ymin = 0, fill = "red", alpha = 0.3)
)
# Distribution de l’âge des mères et des pères en fonction de l'espèce (voir onglet B du chapitre 3.2)
# Chargement des librairies ggplot2 et gridExtra
library(ggplot2)
library(gridExtra)
##
## Attachement du package : 'gridExtra'
## L'objet suivant est masqué depuis 'package:dplyr':
##
## combine
# Préparation d'une liste qui contiendra les graphiques à afficher
gg_hist_age_spe <- list()
# Création de l'histogramme de l'âge des mères pour les deux espèces
gg_hist_age_spe[[1]] <- ggplot(data = dfvaris_litter, aes(x = agedam)) +
ggtitle("") + xlab("Age de la mère en années") + ylab("Densité") +
geom_histogram(alpha = 0.4, aes(y = ..density.., fill = species), bins = 15, color = "grey30") +
geom_density(alpha = 0.2) +
scale_fill_manual(values = c("#69b3a2", "#404080")) +
facet_wrap(~ species) +
theme(legend.position = "none")
# Création de l'histogramme de l'âge des pères pour les deux espèces
gg_hist_age_spe[[2]] <- ggplot(data = dfvaris_litter, aes(x = agesire)) +
ggtitle("") + xlab("Age du père en années") + ylab("Densité") +
geom_histogram(alpha = 0.4, aes(y = ..density.., fill = species), bins = 10, color = "grey30") +
geom_density(alpha = 0.2) +
scale_fill_manual(values = c("#69b3a2", "#404080")) +
facet_wrap(~ species) +
theme(legend.position = "none")
# Organisation et affichage des quatre graphiques
do.call(grid.arrange, c(gg_hist_age_spe, nrow = 2))
# Distribution de la taille des portées en fonction de l'espèce (voir onglet C du chapitre 3.2)
# Chargement des librairies ggplot2 et gridExtra
library(ggplot2)
# Création du boxplot de la taille des portées en fonction de l'espèce
(gg_bxplt_ls_spe <- ggplot(dfvaris_litter, aes(x = species, y = littersizebirth)) +
xlab("") + ylab("Taille de la portée") +
geom_boxplot(fill = c("#69b3a2", "#404080")))
# Création du 'violin plot' de la taille des portées en fonction de l'espèce
(gg_violin_ls_spe <- ggplot(dfvaris_litter, aes(x = species, y = littersizebirth, fill = species)) +
xlab("") + ylab("Taille de la portée") +
geom_violin(alpha = 0.2) +
scale_fill_manual(values = c("#69b3a2", "#404080")))
# Création du boxplot (avec les points) de la taille des portées en fonction de l'espèce
(gg_jitter_ls_spe <- ggplot(dfvaris_litter, aes(x = species, y = littersizebirth)) +
xlab("") + ylab("Taille de la portée") +
geom_boxplot(fill = c("#69b3a2", "#404080"), alpha = 0.2) +
geom_jitter(color = "black", size = 0.4, alpha = 0.9))
library(ggplot2)
(rel_plot <- ggplot(dfvaris_litter, aes(x = agedam, y = agesire, shape = species)) +
# geom_point(data = meansire, mapping = aes(x = agedam, y = agemeansire), shape = c(rep(17, sum(meansire$species == "Vrubra")), rep(16, sum(meansire$species == "Vvariegata")))) +
xlab("Age de la mère (années)") +
ylab("Age du père (années)") +
scale_shape_manual(values = c(2, 1),
labels = c("V. rubra", "V. variegata")) +
ggtitle("Rélation entre l'âge du père et l'âge de la mère chez les varis: ",
subtitle = "les femmes les plus âgées sont généralement associées avec des males plus \njeune qu'elles") +
theme(legend.justification = c(1, 1),
legend.position = c(1, 1),
legend.title = element_blank(),
plot.subtitle = element_text(size = 10)) +
geom_point()
)
# Relation entre l'âge du père et l'âge de la mère chez deux espèces de varis
# Attention : certains éléments graphiques du ggplot initial ne sont pas conservés par ggplotly (cf le sous-titre qui a disparu).
library(plotly)
##
## Attachement du package : 'plotly'
## L'objet suivant est masqué depuis 'package:ggplot2':
##
## last_plot
## L'objet suivant est masqué depuis 'package:stats':
##
## filter
## L'objet suivant est masqué depuis 'package:graphics':
##
## layout
##
## Attachement du package : 'plotly'
## L'objet suivant est masqué depuis 'package:ggplot2':
##
## last_plot
## L'objet suivant est masqué depuis 'package:stats':
##
## filter
## L'objet suivant est masqué depuis 'package:graphics':
##
## layout
ggplotly(rel_plot)